package cn.jlearn.proxy.agent.container;

import cn.jlearn.proxy.agent.handler.ProxyClientHandler;
import cn.jlearn.proxy.agent.listener.ProxyClientListener;
import cn.jlearn.proxy.common.container.ClientContainer;
import org.tio.client.ClientTioConfig;
import org.tio.client.ReconnConf;
import org.tio.client.TioClient;
import org.tio.client.intf.ClientAioHandler;
import org.tio.client.intf.ClientAioListener;
import org.tio.core.Node;

/**
 * @author qianyingchao
 * @version 1.0
 * @date 2021/5/10 4:17 下午
 */
public class ProxyClient extends ClientContainer {

    public static volatile ClientTioConfig clientTioConfig;

    public ProxyClient(String host, Integer port) {
        super(host, port);
    }

    @Override
    public void startClient(String host, Integer port, String bsId) throws Exception {
        Node serverNode = new Node(host, port);
        ReconnConf reconnConf = new ReconnConf(5000L);
        ClientAioHandler handler = new ProxyClientHandler();
        ClientAioListener listener = new ProxyClientListener();

        if (clientTioConfig == null) {
            synchronized (ProxyClient.class) {
                if (clientTioConfig == null) {
                    clientTioConfig = new ClientTioConfig(handler, listener, reconnConf);
                    clientTioConfig.setHeartbeatTimeout(5000);
                }
            }
        }

        TioClient tioClient = new TioClient(clientTioConfig);
        tioClient.connect(serverNode);
    }

}
